home *** CD-ROM | disk | FTP | other *** search
- ┌────────────────────────────────────────────────────────────────────┐
- │ │
- │ │
- │ AT&T PC6300 SUPPORT BBS - Bulletin Service │
- │ │
- │ SUBJECT: GW-BASIC Notes for the PC6300 │
- │ PROVIDED BY: AT&T PC-Hotline │
- │ │
- ├────────────────────────────────────────────────────────────────────┤
- │ │
- │ DIFFERENCES BETWEEN IBM BASIC VERSION 1.1 AND GW-BASIC │
- │ │
- ├────────────────────────────────────────────────────────────────────┤
- │ │
- │ 1) IBM COMPATABILITY PACKAGE MODIFICATIONS │
- │ │
- │ 1.1) RESERVED WORDS AND TOKENS │
- │ The reserved words and tokens were incompatable, │
- │ making exchange of binary and protected program │
- │ files impossible. GW-Basic token values have been │
- │ modified by this modification package. │
- │ │
- │ 1.2) LINE PRINTER AND KEYBOARD OPEN MODE │
- │ IBM Basic allows these devices to be open without │
- │ a mode specification. GW-Basic would interpret │
- │ these cases as open for random and declare a mode │
- │ error. │
- │ │
- │ 1.3) RS232 SUPPORT │
- │ The /C switch on the IBM Basic command line allows │
- │ the user to specify the sieze of communications │
- │ buffers. This feature has been added to all │
- │ versions of Basic. │
- │ │
- │ 1.4) CLEAR Processing │
- │ CLEAR should turn off music, reset music to │
- │ foreground, turn off PEN and STRIG, and reset DRAW │
- │ scale color. Similar processing should happen for │
- │ LOAD, RUN, CHAIN, CLEAR, and NEW. This processing │
- │ has been added for all GW-Basic versions. │
- │ │
- │ 1.5) BSAVE and BLOAD │
- │ IBM Basic appends the .BAS suffix to file names │
- │ when the user does not supply a suffix. GW-Basic │
- │ did not append a suffix. │
- │ │
- │ 1.6) CENTER OF GRAPHICS SCREEN │
- │ IBM Basic calculates the center by dividing the │
- │ one relative screen dimensions by two. GW-Basic │
- │ calculates the center by dividing the zero │
- │ relative screen dimensions by two. The IBM Basic │
- │ method of calculating the center of the screen is │
- │ now used by GW-Basic. │
- │ │
- │ 1.7) COMMON STATEMENT │
- │ IBM Basic allows the user to define new variables │
- │ using the COMMON statement. GW-Basic declared an │
- │ error if a COMMON statement referred to a │
- │ previously undefined variable. │
- │ │
- │ 1.8) LIST STATEMENT │
- │ During PRINT and LIST processing, IBM Basic clears │
- │ characters from the end of the print item to the │
- │ end of line. All versions of BASIC now function in │
- │ this manner. │
- │ │
- │ 1.9) CURSOR DESIGN │
- │ A) The GW-Basic cursor is on only during character │
- │ input requests from the keyboard. │
- │ B) The IBM Basic displays different cursors for │
- │ the Screen Editor overstrike mode and insert │
- │ mode. │
- │ The GW-Basic cursor is now turned off when │
- │ printing characters to the screen. The cursor is │
- │ turned to the user cursor when the PRINT │
- │ statement terminates. When input is requested, │
- │ the cursor is turned to the insert mode cursor │
- │ or the overwrite mode cursor, depending on the │
- │ Screen Editor mode. │
- │ │
- │ 1.10) INKEY$, INPUT$, INPUT │
- │ A) INKEY$ did not return the same key codes as │
- │ IBM Basic │
- │ B) INPUT$ did not return the same key codes as │
- │ IBM Basic. It should be noted that IBM Basic │
- │ key codes returned to INKEY$ are not the same │
- │ as IBM Basic keycodes returned to INPUT$ for │
- │ all keys. │
- │ C) Device input from "KYBD:" read no break (no │
- │ interrupt takes place) if using the INPUT │
- │ statement. An interrupt took place if │
- │ INPUT$(N,kybd:) IS SPECIFIED. │
- │ GW-Basic now provides the OEM with filters for │
- │ mapping characters on input. These filters │
- │ provide the capability of returning IBM Basic │
- │ keycodes. │
- │ │
- │ 1.11) CHR$ │
- │ Certain IBM character codes in the range │
- │ [&H00,&H1f] have been assigned fonts and are │
- │ printable. Other codes in this range have been │
- │ assigned functions (such as carriage return). │
- │ GW-Basic now provides filters which allow OEM to │
- │ decide which codes in this range are printable │
- │ and which specify control functions. │
- │ │
- │ 1.12) SCREEN function │
- │ SCREEN function requests for the character at the │
- │ current cursor position may return a zero in │
- │ place of &H20 (space) for IBM if there are no │
- │ non-space characters to the right of the │
- │ specified cursor position. GW-Basic can now │
- │ support this character code for the screen │
- │ function. │
- │ │
- │ 1.13) POKE/PEEK │
- │ Results of the POKE and PEEK statements were │
- │ different. The GW-Basic machine interface now │
- │ includes routines to filter PEEK and POKE │
- │ instructions. The OEM may now modify the PEEK or │
- │ POKE address and data value. Certain GW-Basic │
- │ routines have been provided for use in these │
- │ filters. GW-Basic provides the capability to │
- │ support the function of all PEEK and POKE │
- │ locations specified by IBM user documentation. │
- │ │
- │ 1.14) INITIALIZATION DIFFERENCES │
- │ A) HEADING: GW-Basic displays the heading when a │
- │ program is specified on the command line, │
- │ while IBM Basic does not print a heading or │
- │ display function keys in this case. The │
- │ GW-Basic machine interface now contains a │
- │ parameter that specifies to GW-Basic whether to │
- │ print the heading and function keys when a │
- │ program is specified on the command line. │
- │ B) FUNCTION KEY DISPLAY: GW-Basic did not give the │
- │ option of displaying the function keys when │
- │ BASIC initializes, when there is no program on │
- │ the command line. A configuration switch now │
- │ specifies the function key display switch │
- │ position on BASIC initialization. │
- │ │
- │ 1.15) ERROR CODES │
- │ Some of the error codes and messages were │
- │ different. GW-Basic error codes and messages have │
- │ been modified to conform to IBM Basic. │
- │ │
- │ │
- │ 1.16) MUSIC AND SOUND │
- │ A) PLAY octave default not the same. │
- │ B) BEEP duration not the same │
- │ C) SOUND STATEMENT: │
- │ 1)SOUND freq,0 causes the IBM Basic to be │
- │ flushed │
- │ 2)GW-Basic does not perform range checking on │
- │ frequency. │
- │ 3)SOUND statement foreground mode was not │
- │ interruptable by CTL-C or BREAK. This is a │
- │ problem because it is possible to create │
- │ extremely long notes. │
- │ These conditions are considered bugs and have │
- │ been fixed for all versions. Foreground SOUND │
- │ interruptability is available through a GW-Basic │
- │ keyboard routine provided to the OEM for use │
- │ within the speaker control support. │
- │ │
- │ 1.17) COLOR statement syntax │
- │ The IBM COLOR statement syntax was not │
- │ supportable by the GW-Basic OEM interface. This │
- │ problem has been fixed in GW-Basic. │
- │ │
- ├────────────────────────────────────────────────────────────────────┤
- │ │
- │ 2) DIFFERENCES WHICH WILL NOT BE RESOLVED │
- │ │
- │ 2.1) SCREEN EDITOR DIFFERENCES │
- │ (THESE DIFFERENCES MAY NOT EXIST IN SOME VERSIONS │
- │ OF GW-BASIC BECAUSE OF THE FLEXIBILITY OF THE OEM │
- │ INTERFACE FOR MAPPING AND OMITTING FEATURES) │
- │ │
- │ A) Input sequences that wrap to a subsequent │
- │ physical line cause a scroll to open another │
- │ physical line. IBM Basic allows the user to │
- │ type over the text which is on the subsequent │
- │ line. The IBM Basic end of logical line is then │
- │ moved to the end of the logical line which is │
- │ being overwritten. │
- │ B) Skip-to-next-word function. When the cursor is │
- │ positioned on a space the IBM skip-to-next-word │
- │ control function will skip spaces until a word │
- │ is found, progress over the word and proceed to │
- │ the word following. The GW-Basic skip-to-next- │
- │ word control function will skip spaces until a │
- │ word is found. │
- │ C) TAB. In GW-Basic, after stopping at the last │
- │ position on a line, TAB will proceed to the │
- │ next line. IBM Basic TAB only operates on one │
- │ line. │
- │ D) Cursor movement control functions do not join │
- │ physical lines into logical lines. In IBM Basic │
- │ cursor movement can join lines. │
- │ E) Line delete. The GW-Basic Screen Editor uses a │
- │ character other than ESC for line delete. │
- │ F) GW-Basic extends logical lines to new physical │
- │ lines (when required by LF or wrapping at the │
- │ end of the screen). A new blank line is inserted │
- │ following the current line. When physical lines │
- │ following the first physical line in a logical │
- │ line are deleted, the line is removed from the │
- │ screen. In IBM Basic, lines are not inserted or │
- │ removed. │
- │ G) AUTO. The IBM AUTO statement allows the user to │
- │ modify the statement corresponding to the line │
- │ number printed by AUTO only. If the user uses │
- │ the Screen Editor to move to another line, or │
- │ otherwise attempts to modify the line number, │
- │ strange results are obtained. The GW-Basic AUTO │
- │ statement allows the user to modify any line by │
- │ making use of the Screen Editor to modify the │
- │ line number or to move to another line on the │
- │ screen. │
- │ H) Functions added to Screen Editor │
- │ 1) HELP. This control function allows the │
- │ programmer to edit the last statement where │
- │ an error ocurred, or if no error ocurred, │
- │ the last direct statement. │
- │ 2) DELETE WORD. This control function deletes │
- │ the current word starting at the current │
- │ cursor position, and ending at the character │
- │ previous to the next word │
- │ 3) CLEAR TO END OF SCREEN. This control │
- │ function clears all data from the current │
- │ cursor position to the end of the screen. │
- │ │
- │ 2.2) Breaking from INPUT │
- │ IBM Basic allows the user to break from an INPUT │
- │ statement using either Control-C or BREAK. GW-Basic │
- │ provides only one BREAK function code. This │
- │ function code may be assigned to either BREAK, │
- │ Control-C, or both by the OEM. However, no special │
- │ processing is performed to differentiate between │
- │ the INPUT statement and other statements. │
- │ │
- │ 2.3) Sequences returned by the GW-Basic RANDOM NUMBER │
- │ GENERATOR (RND function) will NOT be identical to │
- │ sequences returned by the IBM Basic random number │
- │ generator. │
- │ │
- │ 2.4) /F and /S Options │
- │ IBM Basic statically allocates file space using │
- │ the /F and /S BASIC command line switches. GW-Basic │
- │ allocates space dynamically and is not limited by │
- │ these switches. GW-Basic will not declare an error │
- │ if the user specifies either of these switches. │
- │ │
- │ 2.5) File Format of BASIC │
- │ IBM Basic is in ".COM" file format. GW-Basic is in │
- │ ".EXE" file format. │
- │ │
- │ 2.6) Fielded Strings │
- │ IBM Basic fielded strings retain their values │
- │ after the file is closed. In GW-Basic this space is │
- │ deallocated. Any field statement which is executed │
- │ while a file is opened, has no effect after that │
- │ file is closed. For example, assume file 1 is │
- │ opened, fielded, and closed. If file 1 is │
- │ reopened, it should be refielded. │
- │ │
- │ 2.7) VARPTR │
- │ In IBM Basic, the value returned by VARPTR for a │
- │ given file number is not subject to change during │
- │ program execution. In GW-Basic, FBD's are moved in │
- │ memory when files are opened and closed. To avoid │
- │ problems due to this difference, the statement │
- │ "X=VARPTR(file)" should be executed before every │
- │ referrence to X because a file buffer may be moved │
- │ in memory when another file is closed. │
- │ │
- │ 2.8) Line Printer Filenames │
- │ Line printer filenames have the following syntax: │
- │ "LPTn:[bin]" │
- │ Where if bin is included, the file is opened in │
- │ Binary mode. In this mode, tabs are not expanded │
- │ to spaces, and CR is not forced at end-of-line. │
- │ │
- │ 2.9) DATE$ │
- │ Both IBM Basic and GW-Basic allow a single digit │
- │ for year. IBM Basic interprets the digit 8 as │
- │ 1980. GW-Basic interprets the digit 8 as 2008. │
- │ │
- │ 2.10) Pen and Joy Stick │
- │ The statement 'STRIG ON' and 'STRIG OFF' perform │
- │ no function in GW-Basic. In IBM Basic these │
- │ functions are used to enable and disable the joy │
- │ stick trigger interrupts. │
- │ │
- │ 2.11) Parity Checking on the OPEN statement │
- │ There is an undocumented PE on the IBM OPEN │
- │ statement. This OPEN option enables/disables │
- │ parity checking on input. With no PE specified, │
- │ the IBM OPEN for communications will report no │
- │ parity errors. │
- │ │
- ├────────────────────────────────────────────────────────────────────┤
- │ │
- │ 3) IBM BASIC PROBLEMS FIXED IN GW-BASIC │
- │ │
- │ 3.1) Homing The Graphics and Text Cursor │
- │ IBM Basic does not home the cursor after CLS in │
- │ version A1.0. GW-Basic allows the OEM to choose │
- │ when to home the graphics cursor. The text cursor │
- │ is always returned home as per IBM PC Basic │
- │ version A1.1. │
- │ │
- │ 3.2) NAME statement On Open Files │
- │ IBM Basic allows the NAME statement to refer to an │
- │ open file. This causes no immediate problem, but │
- │ can lead to problems as in the following case: │
- │ 10 OPEN"0",#1,"JUNK" │
- │ 20 NAME"JUNK" AS "JUNK2" │
- │ 30 KILL"JUNK2" │
- │ 40 PRINT#1,"My data" │
- │ 50 CLOSE │
- │ IBM Basic allows this program to execute. Data │
- │ printed to the file is lost. This is inconsistent │
- │ in that KILL is illegal when referring to an open │
- │ file. │
- │ GW-Basic and the standard MS-DOS version of │
- │ BASIC-86 do not allow NAME to refer to open files. │
- │ │
- │ 3.3) Detection Of Identical File Names │
- │ IBM Basic does not detect identical file names │
- │ when the only difference in the name is the case │
- │ of the alphabetic characters comprising the file │
- │ name. This problem prevents IBM Basic from │
- │ detecting that a file in an OPEN statement has │
- │ already been opened. │
- │ GW-Basic and the standard MS-DOS version of │
- │ BASIC-86 are able to detect this user error. │
- │ │
- │ 3.4) Interruptability Of Input From The Keyboard │
- │ Variable length input (INPUT n,var...) from │
- │ the keyboard is not interruptable using the break │
- │ key. The program: │
- │ 10 OPEN "KYBD:" FOR INPUT AS 1 │
- │ 20 INPUT #1,A$ │
- │ 30 GOTO 20 │
- │ will read break as a character (the program is │
- │ virtually uninterruptable). This problem is fixed │
- │ in GW-Basic. │
- │ │
- │ 3.5) Communications │
- │ 1) End Of File. IBM-PC Basic returns EOF true │
- │ whenever the input buffer is empty. GW-Basic │
- │ returns EOF true only when file was opened in │
- │ non binary mode, and CTL-Z has been received. │
- │ Once EOF is true, it remains true until the │
- │ file is closed. This is more analogous to the │
- │ way EOF works on other devices. │
- │ 2) Default Data Bits. IBM Basic documentation │
- │ states that the default bit count for │
- │ communications is 7. The commas in the │
- │ statement: │
- │ OPEN "COM1:,,," │
- │ cause 7 bit mode to be invoked. However, if │
- │ parity or speed are specified, the default data │
- │ bit count is set to 8. GW-Basic defaults to 7 │
- │ data bits. │
- │ │
- │ 3.6) Graphics │
- │ 1) POINT. The IBM BASIC POINT function does not │
- │ detect that certain coordinates are not on the │
- │ screen and therefore are not legal. │
- │ 2) GET and PUT. The array format and speed │
- │ capability of these statements is supportable │
- │ by GW-Basic. However, the operation of these │
- │ commands is highly dependent on hardware design │
- │ and the implementation of OEM specific │
- │ routines. │
- │ │
- │ 3.7) Screen Editor │
- │ 1) The IBM Screen Editor returns a zero to input$ │
- │ function when a null function key is depressed. │
- │ GW-Basic Screen Editor returns no key code to │
- │ INPUT$ for null function keys. │
- │ 2) The IBM Screen Editor terminates function key │
- │ expansion when a key code greater than &H7f is │
- │ encountered. The high bit of this key code is │
- │ removed. GW-Basic allows codes greater than │
- │ &H7f. In late ROMs, the IBM Screen Editor will │
- │ not remove the high order bit from codes │
- │ returned by function key expansion. │
- │ │
- │ 3.8) Trailing Blanks │
- │ The following BASIC program demonstrates a problem │
- │ in IBM Basic: │
- │ 10 OPEN "JUNK FOR OUTPUT AS #1 │
- │ 20 PRINT #1,"ABC " │
- │ 30 CLOSE #1 │
- │ 40 OPEN "JUNK" FOR INPUT AS #1 │
- │ 50 INPUT A$ │
- │ 60 PRINT LEN(A$) │
- │ 70 CLOSE #1 │
- │ The IBM Basic result of the print statement in │
- │ line 60 is 13. The trailing blanks have not been │
- │ removed. GW-Basic removes these trailing blanks as │
- │ specified by the ANSI Standard. │
- │ │
- ├────────────────────────────────────────────────────────────────────┤
- │ │
- │ 4) RS232 COMMUNICATIONS │
- │ │
- │ Previous releases of GW-Basic were incompatable with │
- │ IBM-PC Basic communications in the following areas: │
- │ 1) When a com file was opened with default │
- │ parameters and closed, a CONTROL-Z (1A hex) was │
- │ sent to let the other end of the RS-232 │
- │ protocol know that end-of-file had been │
- │ reached. This is not done in IBM-PC BASIC. │
- │ 2) Under GW-Basic if a COM device was opened with │
- │ the BIN option, EOF always returned false. In │
- │ ASCII mode, EOF returned false until it │
- │ received a CONTROL-Z, after which time it │
- │ always returned true. │
- │ These changes made EOF behave in a device independent │
- │ manner. For example, a program which was written to │
- │ read sequentially through a disk file, stopping when │
- │ EOF was true, can now be used to read a COM file. For │
- │ another example, GW-Basic can load "COM1:" and terminate │
- │ when the load is finished if the user on the other end │
- │ of the RS232 line types SAVE "COM1:",A. │
- │ │
- │ The number of application programs which have been │
- │ written to use IBM-PC COM cannot be ignored. The │
- │ following change in GW-Basic is intended to provide │
- │ compatability with IBM-PC Basic while retaining the │
- │ features added to GW-Basic. │
- │ NOTE: This change is isolated to version independent │
- │ code and has no effect on OEM written routines. │
- │ │
- │ COM files can be opened in one of the following ways: │
- │ │
- │ 1) With the ASC option │
- │ In this mode, EOF is always false until a CTL-Z │
- │ is received. When a file is opened for OUTPUT │
- │ or RANDOM, a CTL-Z is sent when the file is │
- │ closed. │
- │ │
- │ 2) With the BIN option │
- │ In this "raw" mode, Basic performs no filtering │
- │ of data. This includes forcing carriage return │
- │ when line width is exceeded. This option │
- │ overrides the LF option. EOF has the same │
- │ meaning as it does in IBM-PC Basic. EOF is TRUE │
- │ if no data exists in the input buffer. │
- │ │
- │ 3) With neither the BIN nor the ASC options. │
- │ This mode is compatible with IBM-PC Basic. No │
- │ CTL-Z is sent when the file is closed. EOF is │
- │ TRUE if no data exists in the input buffer. │
- │ │
- │ BSAVE, BLOAD force the mode to BINARY. This insures │
- │ BASIC will not force any Carriage Returns if the device │
- │ is not 255 (infinite). │
- │ │
- │ SAVE "COMn:...",A forces the mode to ASCII. │
- │ │
- │ LOAD 'COMn:..." forces the mode to ASCII if the first │
- │ character received is less than 80 hex, indicating an │
- │ ASCII file is being loaded. This ensures that ASCII │
- │ LOADs will terminate. │
- │ │
- │ COM file syntax: │
- │ "COMn: [speed] [,parity] [,data] [,stop] [,RS] │
- │ [,CS[n]] [DS[n]] [,CD[n]] [,LF] [,ASC] [,BIN]" │
- │ Where: │
- │ SPEED baud rate in bits per second │
- │ PARITY N, E, 0 (none, even, odd) │
- │ DATA 5,6,7,8 bits per byte │
- │ STOP 1, 1.5, 2 stop bits │
- │ Default for baud greater than 110 is 1 │
- │ Default for 110 baud or lower & 5 data bits │
- │ is 1.5 │
- │ Default for 110 baud or lower & 6-8 data bits │
- │ is 2 │
- │ RS Suppress RTS (Request To Send) │
- │ CS[n] Controls CTS (Clear To Send) │
- │ DS[n] Controls DSR (Data Set Ready) │
- │ CD[n] Controls CD (Carrier Detect) │
- │ This is also referred to as RLSD │
- │ (Receive line Signal Detect) │
- │ LF Send a Line Feed character (X'OA') │
- │ following a Carriage Return (X'OD') │
- │ ASC Open COM file in ASCII mode │
- │ BIN Open COM file in BINARY mode │
- │ │
- │ The RTS (Request To Send) line is turned on when you │
- │ execute an OPEN "COM..." statement unless you include │
- │ the RS option. │
- │ If CD is omitted, it defaults to CSO │
- │ If DS is omitted, it defaults to DS1000 │
- │ If CS is omitted, it defaults to CS1000 │
- │ If RS is specified and CS is omitted, then CS defaults │
- │ to 0. │
- │ │
- │ Normally I/O statements to a communication file will │
- │ fail if the CTS (Clear To Send) or DSR (Data Set Ready) │
- │ lines are not cabled. The CS and DS options allow you │
- │ to avoid this problem by ignoring these lines. If the │
- │ [n] argument is included, it specifies the number of │
- │ milliseconds to wait for the signal before returning a │
- │ "Device Timeout" error. │
- │ │
- │ If the argument [n] in the CS, DS, and CD options is │
- │ omitted, or equal to 0, then that line's status is not │
- │ checked at all. │
- │ │
- │ NOTE: The speed, parity, data, and stop parameters are │
- │ positional, but RS, CS< DS, and CD may appear in any │
- │ order after STOP. │
- │ │
- │ When included in the parameter list, LF will cause a │
- │ Line Feed to be sent after a Carriage Return. │
- │ │
- │ │
- └────────────────────────────────────────────────────────────────────┘
-